﻿using System;
using System.Collections.Generic;
using System.Text;

namespace AzManADAMStore
{
    /// <summary>
    /// Clase que encapsula una operación
    /// </summary>
    public class Operation
    {
        /// <summary>
        /// Path en ADAM
        /// </summary>
        public string Path;

        /// <summary>
        /// Nombre de la operación
        /// </summary>
        public string Name;

        /// <summary>
        /// Descripción de la operación
        /// </summary>
        public string Description;

        /// <summary>
        /// Código de operación
        /// </summary>
        public long OperationCode;



        public Operation()
        {
        }


        /// <summary>
        /// Crea una instancia con los mismos valores
        /// </summary>
        /// <returns></returns>
        public Operation Clone()
        {
            Operation newOperation = new Operation();
            this.Copy(newOperation);
            return newOperation;
        }

        /// <summary>
        /// Copia los valores de la instancia actual
        /// </summary>
        /// <param name="NuevoOperation">Instancia de destino</param>
        public void Copy(Operation NuevoOperation)
        {
            NuevoOperation.Path = this.Path;
            NuevoOperation.Name = this.Name;
            NuevoOperation.Description = this.Description;
            NuevoOperation.OperationCode = this.OperationCode;
        }


        /// <summary>
        /// Lista de operaciones
        /// </summary>
        public class OperationList : SortedDictionary<string, Operation>
        {
            /// <summary>
            /// Crea una instancia con los mismos valores
            /// </summary>
            /// <returns></returns>
            public OperationList Clone()
            {
                OperationList newLista = new OperationList();
                foreach (Operation actualOperation in this.Values)
                    newLista.Add(actualOperation.Name, actualOperation.Clone());

                return newLista;
            }

        }
    }
}
